package com.func.domain.activity.service;

import com.func.domain.activity.model.entity.ActivityAccountEntity;
import com.func.domain.activity.model.entity.DeliveryOrderEntity;
import com.func.domain.activity.model.entity.SkuRechargeEntity;
import com.func.domain.activity.model.entity.UnpaidActivityOrderEntity;

/**
 * @version 1.0
 * @className IRaffleOrder
 * @description 抽奖活动订单接口
 * @author: func
 * @date 2025/3/7 21:29
 */


public interface IRaffleActivityAccountQuotaService {
    /**
     * 创建 sku 账户充值订单, 给用户增加抽奖次数
     * <p> </p>
     * 1. 在 [打卡, 签到, 分享, 对话, 积分兑换] 等行为动作下, 创建出活动订单, 来给用户的活动账户, 充值可用的抽奖次数
     * 2. 对于用户可获得的抽奖次数, 比如首次进来就有一次, 也就是初始配置, 依赖于云运营的配置动作, 在前端页面上, 用户点击后, 可以获得一次抽奖次数
     *
     * @param skuRechargeEntity 商品活动充值实体对象 : userId, sku (activity + activity-count), 幂等业务单号
     * @return 活动Id
     */
    UnpaidActivityOrderEntity createOrder(SkuRechargeEntity skuRechargeEntity);

    /**
     * 查询用户日已经参与活动抽奖的次数
     *
     * @param activityId 活动ID
     * @param userId
     * @return 参加的次数
     */
    Integer queryRaffleActivityAccountDayPartakeCount(Long activityId, String userId);

    /**
     * 查询用户的各个额度
     *
     * @param userId     用户ID
     * @param activityId 活动ID
     * @return 用户总账户实体
     */
    ActivityAccountEntity queryActivityAccountEntity(String userId, Long activityId);

    /**
     * 订单出货 - 积分充值, 扫描订单, 发放订单对应的商品
     * @param deliveryOrderEntity 出货单实体对象
     */
    void updateOrder(DeliveryOrderEntity deliveryOrderEntity);
}
